﻿#include <stdio.h>
#include <windows.h>
#include "Link.h"
#include "ExternVar.h"

//SYBC是一个控制台外部命令,用于改善控制台脚本的输入输出
//开发:SYBN 2010.1-2010.12   QQ:3543247773   Q群:3401238
//本程序是基于COM版编写的EXE版,力求同样的参数和效果以在不同系统互相替代
//COM版的SYBC的增强版SYXQ正在由其他人员开发与维护
//

//SYBC用法  SYBC [变量名1] [变量名2] [变量名3] ...
//指定的环境变量中存放指令，这是一种定长的标签语法,一个标签的效果将持续到下一个同类标签，标签语法如下：
//;:1XXxx 修改光标到XX行xx列（XX的范围为0-24，EXE版允许大于24，COM版不允许）（xx的范围为0-80）
//$XX     修改之后的输出内容的颜色为XX,XX为16进制值,同命令行的color指令
//;       换行
//其他    其他内容都会被现实在屏幕上

//关于用sybc替代printf
//可以像使用printf那样用sybc函数显示字符串,区别如下
//sybc不支持%格式串
//sybc换行使用分号
//其他类似

//标准SYBC语法示例: SYBCS=:10000$3ESYBC

void main (int argc, char *argv[])
{
	char *sybcss = (char*)calloc(32700,1);//申请全0的字符型内存空间.作为指令缓冲池
	char *sybcs=sybcss;//定义空间操作指针
	int i;
	CONSOLE_SCREEN_BUFFER_INFO bInfo;
	if (argc == 1)//若未指定指令变量,将显示提示
	{

		sybcs="12400$0C你需要指定指令变量! $07如:$0ASYBCS";
		GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &bInfo ); 
		printf("窗口缓冲:%dx%d=%d\n",bInfo.dwSize.X , bInfo.dwSize.Y,bInfo.dwSize.X * bInfo.dwSize.Y);
		system("color 3e");
		GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &bInfo ); 
		printf("光标起点:[%d,%d]%d",bInfo.dwCursorPosition.Y , bInfo.dwCursorPosition.X,bInfo.wAttributes);
		sybc(sybcs);//显示sybcs，相当于printf("%s\n",sybcs);
		system("pause>nul");
	}
	for (i=1;i<argc;i++)//argv[0]不需要，从1开始读
	{
		memset(sybcs,0,32100); //清空内存中的指令缓冲池
		GetEnvironmentVariable(argv[i],sybcs,32000);//读取环境变量argv[i]给字符串sybcs,最多读32000字符
		sybc(sybcs);//显示sybcs，相当于printf("%s\n",sybcs);
		GotoHL(0,0);//移动光标到0,0
	}
	free(sybcss);//释放内存
}
